/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package agentes;

import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import reputacao.DadosReputacaoIndividual;
import reputacao.ReputacaoIndividual;
import reputacao.ReputacaoSocial;
import util.DadosInvestir;
import util.Palpite;

/**
 *
 * @author marapao
 */
public class Investidor implements Agente {

    private double dinheiro;
    private List<Prospectador> prospectadores;
    private double min_rep = 0.5;
    private String nome;
    private List<Palpite> carteira;
    private double reputacao;

    public double getReputacao() {
        return reputacao;
    }

    public void setReputacao(double reputacao) {
        this.reputacao = reputacao;
    }

    

    public Investidor(double dinheiro, List<Prospectador> prospectadores, String nome) {
        this.dinheiro = dinheiro;
        this.prospectadores = prospectadores;
        this.nome = nome;
        carteira = new ArrayList<Palpite>();
    }

    


    public List<Prospectador> getProspectadores() {
        return prospectadores;
    }

    public double getDinheiro() {
        return dinheiro;
    }

    public void setDinheiro(double dinheiro) {
        this.dinheiro = dinheiro;
    }

    

    public double getMin_rep() {
        return min_rep;
    }

    public List<Palpite> getCarteira() {
        return carteira;
    }

    public void addCarteira(Palpite p){
        carteira.add(p);
    }
    public void setCarteira(List<Palpite> carteira) {
        this.carteira = carteira;
    }

    public void setMin_rep(double min_rep) {
        this.min_rep = min_rep;
    }

    public String getNome() {
        return nome;
    }

    public void setNome(String nome) {
        this.nome = nome;
    }

    public void setProspectadores(List<Prospectador> prospectadores) {
        this.prospectadores = prospectadores;
    }

    public Prospectador getProspectador(String nome) {
        for (Prospectador prospectador : prospectadores) {
            if (prospectador.getNome().equals(nome)) {
                return prospectador;
            }
        }
        return null;
    }

    public void removeProspectador(Prospectador prospectador) {

        List<Prospectador> remover = new LinkedList<Prospectador>();
        for (Prospectador pros : prospectadores) {
            if (pros.getNome().equals(prospectador.getNome())) {
                remover.add(pros);
            }
        }

        prospectadores.removeAll(remover);
    }

    public void insereProspectador(Prospectador prospectador) {
        removeProspectador(prospectador);
        prospectadores.add(prospectador);
    }

    //função que retorna uma lista com o agente(nome) e uma lista de ações ligaddas a ele de propostas de açoes
    //para serem investidas
    public List<DadosInvestir> investir() {
        List<DadosInvestir> resp = new LinkedList<DadosInvestir>();
        DadosInvestir aux = null;
        List<String> auxAcoes = new ArrayList<String>();



        for (Prospectador prospectador : prospectadores) {
            auxAcoes = new ArrayList<String>();
            for (String string : prospectador.getAcoes()) {
                auxAcoes.add(string);
            }
            aux = new DadosInvestir(prospectador.getNome(), auxAcoes);
            resp.add(aux);
        }
        return resp;
    }

    //pega os tres agentes com maior reputação atéo momento
    public List<String> plano() {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    //pega-se os 10 ageente com a maior reputação, em caso de mesmo reputação
    //a escolha acontece por ordem de leitura
    public void acao(ReputacaoIndividual ri, ReputacaoSocial rs) {
        List<DadosInvestir> investe = investir();
        List<DadosInvestir> investidos = new LinkedList<DadosInvestir>();
        Prospectador proAux = null;

        for (DadosInvestir dadosInvestir : investe) {

            proAux = getProspectador(dadosInvestir.getNome());

        }






    }
}
